/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.negocio;


import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import util.Algoritmo;
import util.IlusParser;


/**
 *
 * @author Ruben
 */
@Stateless
public class CompiladorBean implements CompiladorBeanLocal {

    private String inArchivo = "C:/Users/Ruben/Desktop/Proyecto/Fuente/ProyectoIC2012/ProyectoIC2012-ejb/src/java/util/program.txt";
    private StreamTokenizer tokenizer;
    private String outArchivo = "C:/Users/Ruben/Desktop/Proyecto/Fuente/ProyectoIC2012/ProyectoIC2012-ejb/src/java/util/program.dat";

    @Override
    public void generarArchivo() {

        IlusParser parser = new IlusParser();

        try {
            Algoritmo alg = parser.parser(inArchivo);
            //alg.Imprimir();
            FileOutputStream fos = new FileOutputStream(outArchivo);
            ObjectOutputStream out = new ObjectOutputStream(fos);
            out.writeObject(alg);
            out.flush();
            out.close();
        } catch (IOException e) {

            System.out.println("Se produjo un error de entrada y/o salida");

        }

    }    

    @Override
    public List<String> analizarCadena() {
        List<String> miLista = new ArrayList<String>();
        try {
            
            String cadena = "C:/Users/Ruben/Desktop/Proyecto/Fuente/ProyectoIC2012/ProyectoIC2012-ejb/src/java/util/program.txt";
            File file = new File(inArchivo);
            if (!file.isFile()) {
                throw new Error(cadena + " no es un fichero normal");
            }
            tokenizer = new StreamTokenizer(new FileReader(file));
            int linea = 0;       // en qu lnea estamos
            for (int lexema = tokenizer.nextToken();
                    lexema != StreamTokenizer.TT_EOF;
                    lexema = tokenizer.nextToken()) {
                if (linea != tokenizer.lineno()) {
                    linea = tokenizer.lineno();
                    String lin = "liena " + linea;
                    
                }
                switch (lexema) {
                    case StreamTokenizer.TT_NUMBER:
                        miLista.add(String.valueOf(tokenizer.nval));
                    case StreamTokenizer.TT_WORD:
                        miLista.add(String.valueOf(tokenizer.sval));
                    case '"':
                    case '\'':
                        miLista.add(String.valueOf(tokenizer.sval));

                    default:
                        miLista.add(String.valueOf((char) tokenizer.ttype));
                        
                        


                }
              
            }

        } catch (IOException ex) {
            Logger.getLogger(CompiladorBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return miLista;

    }  
    
    
}
